FalconでRESTful Webサービスの実装 Part2
URIの改善
Part1 では、GETメソッドでタスクの一覧を取得したときにIDがそのまま表示されていました。 クライアントはタスクIDからURIを構築する必要がありますが、将来的にAPIのバージョンが変わったときにURIの変更が難しくなってしまいます。
そこで、タスクIDを返す代わりに、タスクを制御するURIを返すようにしておき、クライアントはそのURIを利用するようにしましょう。
id フィールドを uriフィールドに置き換える関数make_public_task() を作成します。
code: python
def make_public_task(task, uri, id_included=False):
new_task = task.copy()
id = new_task.pop('id')
if id_included:
else:
new_task'uri' = f'{uri}/{id}' return new_task
リソースメソッドをこれに対応させます。
code: python
class TaskListResource:
def on_get(self, req, resp):
resp.media = {'tasks':
}
# ...
class TaskResource:
def on_get(self, req, resp, id):
try:
task_id = int(id) - 1
resp.media = {'tasks':
make_public_task(task, req.uri, id_included=True)
}
except IndexError:
raise falcon.HTTPError(falcon.HTTP_404)
# ...
code: bash
{
"tasks": [
{
"title": "Buy Beer",
"description": "IPA 6 bottles",
"done": false,
},
{
"title": "Buy groceries",
"description": "Beef, Tofu, Sting Onion",
"done": false,
}
]
}
code: bash
{
"tasks": {
"title": "Buy Beer",
"description": "IPA 6 bottles",
"done": false,
}
}